package com.wind.sso;

import java.util.UUID;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.wind.utils.MockDatabaseUtil;

@Controller
public class SSOServerController {

	/**
	 * 	统一认证登录检查全局会话
	 */
	@RequestMapping("checkLogin")
	public String checkLogin(String redirectUrl, HttpSession session, Model model) {
		// 1、判断是否有全局会话
		String token = (String) session.getAttribute("token");
		// 如果没有
		if (StringUtils.isEmpty(token)) {
			// 跳转到统一认证登录页面
			model.addAttribute("redirectUrl", redirectUrl);
			return "login";
		}else {
			// 有全局会话
			model.addAttribute("token", token);
			return "redirect:" + redirectUrl;
		}
	}
	
	/**
	 * 	登录功能
	 */
	@RequestMapping("/login")
	public String login(String username, String password, String redirectUrl, HttpSession session, Model model) {
		// 如果登录成功
		if ("zhangsan".equals(username) && "666".equals(password)) {
			// 1、创建令牌信息
			String token = UUID.randomUUID().toString();
			// 2、创建全局会话 将令牌放入会话中
			session.setAttribute("token", token);
			// 3、把令牌放入到数据库中 将来比对 全局令牌是否是我们产生的
			// 通过一个静态常量来模拟存入的数据库信息
			MockDatabaseUtil.T_TOKEN.add(token);
			// 4.重定向到原项目地址 并携带token
			model.addAttribute("token", token);
			return "redirect:" + redirectUrl;
		}
		// 如果登录名或者密码不成功 跳转到登录页面
		model.addAttribute("redirectUrl", redirectUrl);
		return "login";
	}
	
	/**
	 * 	校验token是否由认证中心产生
	 */
	@RequestMapping("/verify")
	@ResponseBody
	public String verifyToken(String token, String clientUrl, String jsessionid) {
		if (MockDatabaseUtil.T_TOKEN.contains(token)) {
			
			// 说明令牌有效 返回"ture"
			return "true";
		}
		return "false";
	}
}
